<?php

/**
 * @author peihong.zhangph
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.phpwind.com
 *
 * @version $Id: WindidMessageDm.php 24834 2013-02-22 06:43:43Z jieyin $
 */
class WindidMessageDm extends PwBaseDm
{
    public $id;

    public function __construct($id = 0)
    {
        $id = intval($id);
        $id > 0 && $this->id = $id;
    }

    /**
     * 设置消息创建者uid.
     *
     * @param int $uid
     *
     * @return WindidMessageDm
     */
    public function setCreatedUserId($uid)
    {
        $uid = intval($uid);
        $this->_data['from_uid'] = $uid;

        return $this;
    }

    /**
     * 设置收件人uid.
     *
     * @param int $uid
     *
     * @return WindidMessageDm
     */
    public function setToUid($uid)
    {
        $uid = intval($uid);
        $this->_data['to_uid'] = $uid;

        return $this;
    }

    /**
     * 设置发件人uid.
     *
     * @param int $uid
     *
     * @return WindidMessageDm
     */
    public function setFromUid($uid)
    {
        $uid = intval($uid);
        $this->_data['from_uid'] = $uid;

        return $this;
    }

    /**
     * 设置内容.
     *
     * @param string $content
     *
     * @return WindidMessageDm
     */
    public function setContent($content)
    {
        $this->_data['content'] = $content;

        return $this;
    }

    /**
     * 设置$lastMessage.
     *
     * @param array $lastMessage
     *
     * @return WindidMessageDm
     */
    public function setLastMessage($lastMessage)
    {
        $this->_data['last_message'] = $lastMessage;

        return $this;
    }

    /**
     * 设置消息id.
     *
     * @param int $messageId
     *
     * @return WindidMessageDm
     */
    public function setMessageId($messageId)
    {
        $messageId = intval($messageId);
        $this->_data['message_id'] = $messageId;

        return $this;
    }

    /**
     * 设置$dialogId.
     *
     * @param int $dialogId
     *
     * @return WindidMessageDm
     */
    public function setDialogId($dialogId)
    {
        $this->_data['dialog_id'] = intval($dialogId);

        return $this;
    }

    /**
     * 设置未读数.
     *
     * @param int $num
     *
     * @return WindidMessageDm
     */
    public function setUnreadCount($num)
    {
        $this->_data['unread_count'] = intval($num);

        return $this;
    }

    /**
     * 设置消息数.
     *
     * @param int $num
     *
     * @return WindidMessageDm
     */
    public function setMessageCount($num)
    {
        $this->_data['message_count'] = intval($num);

        return $this;
    }

    /**
     * 设置新增已读数.
     *
     * @param int $num
     *
     * @return WindidMessageDm
     */
    public function increaseUnreadCount($num = 1)
    {
        $this->_increaseData['unread_count'] = intval($num);

        return $this;
    }

    /**
     * 设置新增消息总数.
     *
     * @param int $num
     *
     * @return WindidMessageDm
     */
    public function increaseMessageCount($num = 1)
    {
        $this->_increaseData['message_count'] = intval($num);

        return $this;
    }

    /**
     * 设置更新时间.
     *
     * @param int $time
     *
     * @return WindidMessageDm
     */
    public function setModifiedTime($time)
    {
        $this->_data['modified_time'] = intval($time);

        return $this;
    }

    public function setIsSend($issend = 0)
    {
        $this->_data['is_send'] = intval($issend);

        return $this;
    }

    public function setIsRead($isread = 0)
    {
        $this->_data['is_read'] = intval($isread);

        return $this;
    }

    public function beforeAddDialog()
    {
        $this->_serializeLastMessage();
        $this->_setModifiedTime();

        return true;
    }

    public function beforeUpdateDialog()
    {
        $this->_serializeLastMessage();
        //	$this->_setModifiedTime();
        return true;
    }

    protected function _beforeAdd()
    {
        $this->_setCreatedTime();
        if (($result = $this->checkContent()) !== true) {
            return $result;
        }
        /*
        if (($right = $this->_checkAddMessage($this->_data['uid'],$this->_data['from_uid'])) !== true) {
            return $right;
        }
        */
        return true;
    }

    protected function _beforeUpdate()
    {
        return true;
    }

    private function _setModifiedTime()
    {
        $this->_data['modified_time'] = Pw::getTime();
    }

    /**
     * 设置创建时间.
     */
    private function _setCreatedTime()
    {
        $this->_data['created_time'] = Pw::getTime();
    }

    private function _serializeLastMessage()
    {
        if (is_array($this->_data['last_message'])) {
            $this->_data['last_message'] = serialize($this->_data['last_message']);
        }
    }

    /**
     * 检查消息内容.
     *
     * @return bool
     */
    private function checkContent()
    {
        $len = WindString::strlen($this->_data['content']);
        if (!$this->_data['content'] || $len > 500) {
            return new WindidError(WindidError::MESSAGE_CONTENT_LENGTH_ERROR);
        }

        return true;
    }
}
